package marionito.servlets;

import java.io.IOException;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import javax.ejb.EJB;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import marionito.domaine.Case;
import marionito.domaine.Joueur;
import marionito.domaine.Partie;
import marionito.usecases.GestionJoueurPartie;
import marionito.usecases.GestionParties;

/**
 * Servlet implementation class DebutJeu
 */
@WebServlet(name = "DebutJeu.html")
public class DebutJeu extends HttpServlet {
	private static final long serialVersionUID = 1L;
	@EJB
	private GestionParties gestionParties;

	@EJB
	private GestionJoueurPartie gestionJoueurPartie;

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		ServletContext ctx = getServletContext();
		HttpSession session = request.getSession();
		String nomPartie = (String) session.getAttribute("partie");

		synchronized (ctx) {
			Integer de = (Integer) ctx.getAttribute("valeurDe");
			if (de == null) {
				de = gestionParties.lancerDe(nomPartie);
			}
			ctx.setAttribute("valeurDe", de);
			session.setAttribute("listeCasePoss", gestionJoueurPartie
					.getCasesPossibles(nomPartie,
							(Joueur) session.getAttribute("joueur"), de));
			Partie partie = gestionParties.recherchePartie(nomPartie);
			partie.getIndiceDernierJetonEnvoye();

		}

		Joueur joueur = (Joueur) request.getSession().getAttribute("joueur");

		List<Case> listeCases = gestionParties.listeCases(joueur, nomPartie);
		Collections.sort(listeCases, new Comparator<Case>() {

			@Override
			public int compare(Case c1, Case c2) {
				return c1.getNum() - c2.getNum();
			}

		});

		request.getSession().setAttribute("listeCases", listeCases);
		getServletContext().getNamedDispatcher("jeu.html").forward(request,
				response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}
